package com.whfc.fuum.manager;

import com.whfc.common.exception.BizException;
import com.whfc.fuum.dto.SysDeptDTO;
import com.whfc.fuum.entity.SysDept;
import com.whfc.fuum.entity.SysDeptUser;
import com.whfc.fuum.param.SysDeptAdd;
import com.whfc.fuum.param.SysDeptEdit;

import java.util.List;

/**
 * @author qzexing
 * @version 1.0
 * @date 2021-03-11 14:59
 */
public interface SysDeptManager {


    /**
     * 由deptId查询deptName
     *
     * @param deptId 组织机构ID
     * @return 组织机构名称
     */
    String getDeptNameById(Integer deptId);

    /**
     * 查询用户绑定组织机构
     *
     * @param userId 用户ID
     * @param deptId 组织机构ID
     * @return 用户绑定的组织机构
     */
    SysDeptUser getDeptUserByUserId(Integer userId, Integer deptId);

    /**
     * 获取机构信息
     *
     * @param deptId 组织机构ID
     * @return 组织机构信息
     */
    SysDeptDTO getDeptDTOById(Integer deptId);


    /**
     * 添加组织机构
     *
     * @param deptAdd 添加组织机构请求参数对象
     * @return 组织机构
     * @throws BizException 业务异常
     */
    SysDept addDept(SysDeptAdd deptAdd);

    /**
     * 编辑组织机构
     *
     * @param deptEdit 编辑组织机构请求参数对象
     * @return 组织机构
     * @throws BizException 业务异常
     */
    void editDept(SysDeptEdit deptEdit);


    /**
     * 删除机构(逻辑删除)
     *
     * @param deptId 组织机构ID
     * @throws BizException 业务异常
     */
    void delDept(Integer deptId);

    /**
     * 构建组织机构树
     *
     * @param deptDTOList 组织机构列表
     * @return 组织机构树
     */
    List<SysDeptDTO> buildDeptTree(List<SysDeptDTO> deptDTOList);

    /**
     * 查询所有子孙节点
     *
     * @param deptId  组织机构ID
     * @param keyword 搜索关键字
     * @return 子孙节点
     */
    List<SysDeptDTO> getDescendantDeptListById(Integer deptId, String keyword);

    SysDeptDTO selectSysDeptById(Integer deptId);

}
